﻿namespace Nop.Plugin.Payments.UsaEpay
{
    #region

    using System.Diagnostics.CodeAnalysis;

    #endregion

    /// <summary>
    ///     The USA ePay Service interface.
    /// </summary>
    public interface IUsaEpayService
    {
        #region Public Properties

        /// <summary>
        ///     Gets or sets the url.
        /// </summary>
        string Url { get; set; }

        #endregion

        #region Public Methods and Operators

        /// <summary>
        /// The capture transaction.
        /// </summary>
        /// <param name="securityToken">
        /// The security token.
        /// </param>
        /// <param name="authorizationTransactionId">
        /// The authorization transaction id.
        /// </param>
        /// <param name="amount">
        /// The amount.
        /// </param>
        /// <returns>
        /// The <see cref="TransactionResponse"/>.
        /// </returns>
        [SuppressMessage("StyleCop.CSharp.NamingRules", "SA1300:ElementMustBeginWithUpperCaseLetter", Justification = "Reviewed. Suppression is OK here.")]
        TransactionResponse captureTransaction(ueSecurityToken securityToken, string authorizationTransactionId, double amount);

        /// <summary>
        /// The refund transaction.
        /// </summary>
        /// <param name="securityToken">
        /// The security token.
        /// </param>
        /// <param name="transactionId">
        /// The transaction id.
        /// </param>
        /// <param name="amount">
        /// The amount.
        /// </param>
        /// <returns>
        /// The <see cref="TransactionResponse"/>.
        /// </returns>
        [SuppressMessage("StyleCop.CSharp.NamingRules", "SA1300:ElementMustBeginWithUpperCaseLetter", Justification = "Reviewed. Suppression is OK here.")]
        TransactionResponse refundTransaction(ueSecurityToken securityToken, string transactionId, double amount);

        /// <summary>
        /// The run transaction.
        /// </summary>
        /// <param name="securityToken">
        /// The security token.
        /// </param>
        /// <param name="parameters">
        /// The parameters.
        /// </param>
        /// <returns>
        /// The <see cref="TransactionResponse"/>.
        /// </returns>
        [SuppressMessage("StyleCop.CSharp.NamingRules", "SA1300:ElementMustBeginWithUpperCaseLetter", Justification = "Reviewed. Suppression is OK here.")]
        TransactionResponse runTransaction(ueSecurityToken securityToken, TransactionRequestObject parameters);

        /// <summary>
        /// The void transaction.
        /// </summary>
        /// <param name="securityToken">
        /// The security token.
        /// </param>
        /// <param name="transactionId">
        /// The transaction id.
        /// </param>
        /// <returns>
        /// The <see cref="bool"/>.
        /// </returns>
        [SuppressMessage("StyleCop.CSharp.NamingRules", "SA1300:ElementMustBeginWithUpperCaseLetter", Justification = "Reviewed. Suppression is OK here.")]
        bool voidTransaction(ueSecurityToken securityToken, string transactionId);

        #endregion
    }
}